RSS & Working Set
contents
Resident Set Size (RSS)와 Working Set(작업 집합)은 운영체제가 프로세스의 메모리 사용량을 설명하고 관리하는 데 사용하는 핵심 개념입니다. 이 두 용어는 프로세스가 현재 물리 메모리(RAM)를 얼마나 사용하고 있는지를 나타내지만, 서로 다른 관점을 가집니다.
1. Resident Set Size (RSS) 🧠
RSS는 프로세스가 현재 사용하고 있으며 물리적 RAM에 상주하는(Resident) 메모리의 양입니다. 이는 프로세스에게 할당되었지만 디스크의 스왑 공간(swap space)으로 옮겨지지 않고 RAM에 남아 있는 모든 페이지를 포함합니다.
- 정의: 프로세스가 사용 중인 물리 메모리의 크기.
- 포함 내용: 프로세스의 실행 코드, 데이터, 스택, 힙 등 메모리의 모든 부분 중 RAM에 적재된 부분.
- 공유 메모리: RSS는
libc와 같은 공유 라이브러리(Shared Libraries)가 사용하는 메모리도 포함합니다.- 고유(Private) RSS: 해당 프로세스만 사용하는 메모리.
- 공유(Shared) RSS: 다른 프로세스와 공유하는 메모리(예: 공유 라이브러리).
- 주의: 시스템 모니터링 도구(예:
top,ps)가 보고하는 총 RSS는 이 공유 메모리를 각 프로세스에 대해 온전히 포함시키기 때문에, 모든 프로세스의 RSS를 단순히 합산하면 실제 RAM 사용량보다 훨씬 큰 값이 나올 수 있습니다.
2. Working Set (WS) ⚙️
Working Set은 프로세스의 메모리 페이지 중 특정 시간 간격 동안 가장 최근에 활발하게 참조된 페이지들의 집합입니다. 이는 프로세스가 현재 원활하게 실행되기 위해 필요로 하는 메모리 양을 나타냅니다.
- 정의: 프로세스가 집중적으로 접근하는 메모리 페이지의 부분 집합.
- 개념적 중요성 (지역성): WS는 프로그램이 실행될 때 메모리 참조가 특정 영역에 집중되는 참조의 지역성(Locality of Reference) 원리를 기반으로 합니다. OS는 이 WS를 물리적 RAM에 유지하려고 시도합니다.
- 역할: 운영체제의 스케줄러와 메모리 관리자가 WS에 속하는 페이지는 최대한 RAM에 남아 있도록 우선순위를 부여합니다.
RSS와 Working Set의 관계
Working Set은 항상 RSS에 포함되거나 RSS와 동일해야 합니다.
- 이상적인 상태: 프로세스가 원활하게 작동하려면 Working Set에 속한 모든 페이지가 RSS에 포함되어야 합니다.
- WS < RSS: 프로세스는 현재 활발하게 사용하지 않는 페이지를 여전히 RAM(RSS)에 보유하고 있을 수 있습니다.
3. 큰 그림: 가상 메모리 관점 (VIRT vs. RES vs. WS)
| 용어 | 약자 | 설명 | 의미 |
|---|---|---|---|
| 가상 크기 | VIRT / VSZ | 프로세스가 접근할 수 있는 총 가상 메모리의 양. (코드, 데이터, 스왑된 메모리, 공유 라이브러리 모두 포함). | 가장 큰 값. 실제 RAM 사용량 아님. |
| 상주 세트 크기 | RES / RSS | VIRT 중에서 현재 물리적 RAM에 적재되어 있는 부분. | 실제 RAM 사용량. |
| 작업 집합 | WS | RES 중에서 프로세스가 활발히 사용 중인 부분 (참조의 지역성에 기반). | 메모리 수요(Demand)를 나타냄. |
4. 성능 모니터링에서의 중요성
이러한 지표를 모니터링하는 것은 시스템의 건강을 진단하는 데 필수적입니다.
- 페이지 폴트 (Page Faults): 프로세스가 Working Set에 속해 있었지만 OS가 RAM 부족으로 인해 스왑 아웃(디스크로 옮김)한 페이지에 접근하려고 할 때 발생합니다. 이는 프로세스를 일시 중지하고 디스크에서 페이지를 다시 로드해야 하므로 매우 느린 작업입니다.
- 쓰레싱 (Thrashing): 모든 활성 프로세스의 Working Set 합계가 사용 가능한 물리적 RAM을 초과할 때 발생합니다. OS가 메모리 페이지를 디스크로 내보내고 다시 가져오는 데 대부분의 시간을 소비하게 되며, 이 상태는 시스템 성능을 거의 마비시킵니다.
- 메모리 수요 파악: Working Set을 모니터링하면 프로세스의 실제 메모리 수요를 이해할 수 있습니다. WS가 작고 안정적이라면, 해당 프로세스는 효율적으로 실행되고 있음을 의미합니다. WS가 자주 바뀌거나 급격히 커지면, 성능 문제의 원인이 될 수 있습니다.
references